﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ManagementSystem
{
    /// <summary>
    /// Mängu peaaken, kust näeb põhilist infot, kus on sisselogimine jne.
    /// </summary>
    public partial class MainWindow : Window
    {
        /// <summary>
        /// Peaakna konstruktor.
        /// </summary>
        public MainWindow()
        {
            InitializeComponent();

        }

        User uusUser;

        /// <summary>
        /// Kui vajutatakse nupule "lisa uus aine", käivitub antud meetod.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse argumendid</param>
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            LisaUusAine uusAine = new LisaUusAine(statusBar,uusUser, hetkeAinecomboBox);
            uusAine.Show();
        }

        /// <summary>
        /// Kui vajutatakse nupule "lisa uus tund", käivitub antud meetod.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse argumendid</param>
        private void button2_Click(object sender, RoutedEventArgs e)
        {
            LisaUusTund uusTund = new LisaUusTund(statusBar, uusUser, hetkeAinecomboBox.SelectedValue.ToString());
            uusTund.Show();
        }

        /// <summary>
        /// Kui kasutaja vajutab nupule "vaata toimunud tunde", käivitub antud meetod.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse argumendid</param>
        private void button4_Click(object sender, RoutedEventArgs e)
        {
            VaataToimunudTunde vaataTunde = new VaataToimunudTunde(uusUser,hetkeAinecomboBox.SelectedValue.ToString());
            vaataTunde.Show();
        }

        /// <summary>
        /// Kui kasutaja vajutab nupule "logi sisse", käivitub antud meetod.
        /// Kasutaja logitakse sisse, kui ta on baasis olemas.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse argumendid</param>
        private void sisseLogimine_Click(object sender, RoutedEventArgs e)
        {
            DataClasses1DataContext baas;


            if (sisseLogimine.Content.Equals("Logi sisse"))
            {
                try
                {
                    baas = new DataClasses1DataContext();
                    var kasutaja = baas.Users.Single(users => users.userName == kasutajanimiBox.Text &&
                                       users.password == paroolBox.Password);
                    if (kasutaja != null)
                    {

                        uusUser = (User)kasutaja;
                        tervituseLabel.Content = "Tere tulemast kasutaja " + uusUser.firstName +
                            " " + uusUser.lastName;
                        hetkeAinecomboBox.Items.Clear();
                        var tunnid = from Tund in baas.Subjects where Tund.User_ID == kasutaja.User_ID select Tund.Name;
                        foreach (var tund in tunnid)
                        {
                            hetkeAinecomboBox.Items.Add((string)tund);
                        }
                        if(hetkeAinecomboBox.Items.Count > 0){
                            hetkeAinecomboBox.SelectedIndex = 0;
                        }
                    }
                    else
                    {
                        return;
                    }

                    labelKasutaja.IsEnabled = false;
                    labelParool.IsEnabled = false;
                    kasutajanimiBox.IsEnabled = false;
                    paroolBox.IsEnabled = false;
                    sisseLogimine.Content = "Logi välja";
                    registreerimine.IsEnabled = false;
                    tervituseLabel.IsEnabled = true;
                    lisamineLabel.IsEnabled = true;
                    lisaUusAine.IsEnabled = true;
                    if (hetkeAinecomboBox.Items.Count != 0)
                    {
                        LubaLigi();                        
                    }
                }
                catch (ArgumentNullException)
                {
                    MessageBox.Show("Pole sellist kasutajat baasis !");
                }
                catch (InvalidOperationException)
                {
                    MessageBox.Show("Pole sellist kasutajat baasis !");
                }
                catch (Exception)
                {
                    MessageBox.Show("Ebaõnnestus ühenduse loomine serveriga, proovi uuesti !");
                }
            }
            else
            {
                labelKasutaja.IsEnabled = true;
                labelParool.IsEnabled = true;
                kasutajanimiBox.IsEnabled = true;
                kasutajanimiBox.Text = "";
                paroolBox.IsEnabled = true;
                paroolBox.Clear();                 
                sisseLogimine.Content = "Logi sisse";
                registreerimine.IsEnabled = true;
                tervituseLabel.IsEnabled = false;
                tervituseLabel.Content = "";
                andmelabel.IsEnabled = false;
                hetkeAinecomboBox.IsEnabled = false;
                lisaUusAine.IsEnabled = false;
                registreeri6pilane.IsEnabled = false;
                lisaUusAine.IsEnabled = false;
                lisaUusTund.IsEnabled = false;
                lisamineLabel.IsEnabled = false;
                vaatajamuudaLabel.IsEnabled = false;
                toimunudTunnid.IsEnabled = false;
                hinded.IsEnabled = false;
                vaata.IsEnabled = false;
                statusBar.Items.Clear();
            }
        }

        /// <summary>
        /// Peale sisselogimist või uue aine loomist määratakse infolabelid ja buttonid enableks.
        /// </summary>
        private void LubaLigi()
        {
            andmelabel.IsEnabled = true;
            hetkeAinecomboBox.IsEnabled = true;
            registreeri6pilane.IsEnabled = true;
            lisaUusTund.IsEnabled = true;
            vaatajamuudaLabel.IsEnabled = true;
            toimunudTunnid.IsEnabled = true;
            hinded.IsEnabled = true;
            vaata.IsEnabled = true;
        }

        /// <summary>
        /// Kui kasutaja vajutab nupule "Registreeri", käivitatakse antud meetod.
        /// Kasutajal on võimalik luua endale konto.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse argumendid</param>
        private void registreerimine_Click(object sender, RoutedEventArgs e)
        {
            Registreerimine reg = new Registreerimine(statusBar);
            reg.Show();
        }


        /// <summary>
        /// Kui kasutaja vajutab nupule "registreeri õpilane", siis käivitub see meetod.
        /// Saab lisada uue õpilase ainesse.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse argumendid</param>
        private void registreeri6pilane_Click(object sender, RoutedEventArgs e)
        {
            _6pilaseRegistreerimine _6pilane = new _6pilaseRegistreerimine(statusBar, uusUser,hetkeAinecomboBox.SelectedValue.ToString());
            _6pilane.Show();
        }

        /// <summary>
        /// Kui kasutaja loob uue aine, mis on temal esimene, lubatakse ta uutele võimalustele ligi
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse parameetrid</param>
        private void Grid_MouseMove(object sender, MouseEventArgs e)
        {
            if (!registreeri6pilane.IsEnabled && lisaUusAine.IsEnabled && hetkeAinecomboBox.Items.Count != 0)
            {
                LubaLigi();
            }
        }


        /// <summary>
        /// Kui kasutaja vajutab nupule "hinded", käivitatakse antud meetod.
        /// Võimalus näha õpilaste hindeid.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse argumendid</param>
        private void hinded_Click(object sender, RoutedEventArgs e)
        {
            Hinded hinne = new Hinded();
            hinne.Show();
        }
       
    }
}
